데이터 타입과 불변성

#resource
#javascript
작성일:2025. 4. 17.
수정일:2025. 4. 18.

Javascript의 데이터 타입은 크게 두 가지로 나눌 수 있다.

Javascript의 데이터 타입#

  1. 원시타입(Primitive types)

    고정된 크기의 메모리에 저장되며, 값 자체가 변수에 직접 할당된다. 원시 타입은 불변한다(immutable)

    • string: 문자열
    • number: 숫자(정수 및 부동소수점 수 포함)
    • boolean: true 또는 false
    • null: 값이 없음을 의도적으로 나타내는 값
    • undefined: 값이 할당되지 않은 상태
    • symbol: ES6에서 추가된, 고유하고 변경 불가능한 식별자를 만들 때 사용
    • bigint: number타입이 표현할 수 있는 한계를 넘어서는 매우 큰 정수를 다룰 때 사용
  2. 객체타입(Object types)

    크기가 가변적일 수 있으며, 변수에는 값 자체가 아닌 값이 저장된 메모리 주소(참조)가 할당된다. 객체 타입은 가변(mutable)하다. 종류는 다음과 같다.

    • Object: 키-값 쌍의 컬렉션(가장 기본적인 형태)
    • Array: 순서가 있는 값의 목록
    • Function: 호출 가능한 코드 블록(함수도 객체임)
    • Date,RegExp,Map,Set등의 내장 객체들

원시 타입과 객체 타입의 주요 차이점#

원시 타입과 객체 타입은 값 저장 방식, 불변성, 복사 방식 세 가지 주요 측면에서 근본적인 차이를 보인다.

이 차이점들을 이해하는 것은 함수에 인자를 전달할 때, 변수를 복사할 때, 객체의 상태를 관리할 때 발생할 수 있는 예기치 않은 동작(side effects)을 방지하는 데 매우 중요하디. 특히 객체의 가변성과 참조 전달 방식은 주의 깊게 다루어 져야 한다.

  1. 값 저장 방식(Value vs Reference)

    • 원시 타입 변수에 실제 값(value) 자체가 저장된다.

    • 객체 타입 변수에는 객체가 실제 저장된 메모리 공간을 가리키는 참조(reference) 값이 저장된다.

  2. 불변성(Immutability vs Mutability)

    • 원시타입 불변(immutable) 하다. 한번 생성된 원시 갓은 변경할 수 없다. 예를 들어, 문자열의 일부를 변경하려 해도 새로운 문자열이 생성될뿐, 원본 문자열은 변하지 않는다. 변수에 다른 값을 재할당하는 것은 가능하지만, 이는 새로운 값을 가리키도록 하는 것이지 기존 값 자체를 바꾸는 것이 아니다.

    • 객체타입 가변(mutable) 하다. 객체를 생성한 후에도 그 내부의 속성이나 요소를 추가, 수정, 삭제할 수 있다.

    JavaScriptjs
  3. 복사 방식(Pass by Balue vs Pass by Reference)

    • 원시타입 변수를 다른 변수에 할당하면 값에 의한 복사(pass by value) 가 일어난다. 원본 변수의 실제 값이 복사되어 새로운 변수에 저장되므로, 두 변수는 완전히 독립적이다. 한쪽을 변경해도 다른 쪽에 영향을 주지 않는다.

    • 객체타입 변수를 다른 변수에 할당하면 참조에 의한 전달(pass by reference) 이 일어난다. 원본 변수의 참조 값(메모리 주소)이 복사되어 새로운 변수에 저장된다. 따라서 두 변수는 동일한 객체를 가리키게 된다 한쪾 변수를 통해 객체의 내용을 변경하면 다른 변수에도 그 변경 사항이 반영된다.

    JavaScriptjs